<?php
App::uses('AppModel', 'Model');
/**
 * Anuncio Model
 *
 * @property Foto $fotos_anuncio
 * @property Usuario $Usuario
 * @property Calendario $Calendario
 * @property Distancia $Distancia
 */
class Anuncio extends AppModel {
/**
 * Primary key field
 *
 * @var string
 */
	public $primaryKey = 'id_anuncios';
/**
 * Validation rules
 *
 * @var array
 */
	public $validate = array(
		'id_anuncios' => array(
			'numeric' => array(
				'rule' => array('numeric'),
				//'message' => 'Your custom message here',
				//'allowEmpty' => false,
				//'required' => false,
				//'last' => false, // Stop validation after this rule
				//'on' => 'create', // Limit validation to 'create' or 'update' operations
			),
		),
		'usuario_id' => array(
			'numeric' => array(
				'rule' => array('numeric'),
				//'message' => 'Your custom message here',
				//'allowEmpty' => false,,
				//'last' => false, // Stop validation after this rule
				//'on' => 'create', // Limit validation to 'create' or 'update' operations
			),
		),
		'cidade_id' => array(
			'numeric' => array(
				'rule' => array('numeric'),
				'message' => 'Você deve escolher uma cidade',
				//'last' => false, // Stop validation after this rule
				//'on' => 'create', // Limit validation to 'create' or 'update' operations
			),
		),
		'bairro' => array(
			'notempty' => array(
				'rule' => array('notempty'),
				'message' => 'Você deve digitar o bairro',
				//'allowEmpty' => false,
				//'required' => false,
				//'last' => false, // Stop validation after this rule
				//'on' => 'create', // Limit validation to 'create' or 'update' operations
			),
		),
		'novo_pacote' => array(
			'notempty' => array(
				'rule' => array('notempty'),
				'message' => 'Você deve escolher um pacote',
				//'last' => false, // Stop validation after this rule
				//'on' => 'create', // Limit validation to 'create' or 'update' operations
			),
		),
		'tipo_de_estadia' => array(
			'numeric' => array(
				'rule' => array('numeric'),
				'message' => 'Você deve escolher um tipo de estadia',
				//'allowEmpty' => false,
				//'required' => false,
				//'last' => false, // Stop validation after this rule
				//'on' => 'create', // Limit validation to 'create' or 'update' operations
			),
		),
		'preco_diaria' => array(
			'numeric' => array(
				'rule' => array('numeric'),
				'message' => 'Você precisa definir uma diária',
				//'allowEmpty' => false,
				//'required' => false,
				//'last' => false, // Stop validation after this rule
				//'on' => 'create', // Limit validation to 'create' or 'update' operations
			),
		),
		'vagas' => array(
			'numeric' => array(
				'rule' => array('numeric'),
				'message' => 'Você precisa definir um número de vagas',
				//'allowEmpty' => false,
				//'required' => false,
				//'last' => false, // Stop validation after this rule
				//'on' => 'create', // Limit validation to 'create' or 'update' operations
			),
		),
		'almoco' => array(
			'numeric' => array(
				'rule' => array('boolean'),
				//'message' => 'Your custom message here',
				//'allowEmpty' => false,
				//'required' => false,
				//'last' => false, // Stop validation after this rule
				//'on' => 'create', // Limit validation to 'create' or 'update' operations
			),
		),
		'jantar' => array(
			'numeric' => array(
				'rule' => array('boolean'),
				//'message' => 'Your custom message here',
				//'allowEmpty' => false,
				//'required' => false,
				//'last' => false, // Stop validation after this rule
				//'on' => 'create', // Limit validation to 'create' or 'update' operations
			),
		),
		'calendario_id' => array(
			'numeric' => array(
				'rule' => array('numeric'),
				//'message' => 'Your custom message here',
				//'allowEmpty' => false,
				//'required' => false,
				//'last' => false, // Stop validation after this rule
				//'on' => 'create', // Limit validation to 'create' or 'update' operations
			),
		),
		'distancia_do_estadio' => array(
			'numeric' => array(
				'rule' => array('numeric'),
				'message' => 'Você deve digitar uma distância',
				//'allowEmpty' => false,
				//'required' => false,
				//'last' => false, // Stop validation after this rule
				//'on' => 'create', // Limit validation to 'create' or 'update' operations
			),
		),
		'resumo' => array(
			'notempty' => array(
				'rule' => array('notempty'),
				'message' => 'Você deve digitar um resumo',
			),
		),
		'descricao' => array(
			'notempty' => array(
				'rule' => array('notempty'),
				'message' => 'Você deve digitar uma descrição',
			),
		),
	);

	//The Associations below have been created with all possible keys, those that are not needed can be removed

/**
 * hasOne associations
 *
 * @var array
 */
	public $hasOne = array(
		'Fotos' => array(
			'className' => 'Foto',
			'foreignKey' => 'id_fotos',
			'conditions' => '',
			'fields' => '',
			'order' => ''
		)
	);

/**
 * belongsTo associations
 *
 * @var array
 */
	public $belongsTo = array(
		'Usuario' => array(
			'className' => 'Usuario',
			'foreignKey' => 'usuario_id',
			'conditions' => '',
			'fields' => '',
			'order' => ''
		),
		'Cidade' => array(
			'className' => 'Cidade',
			'foreignKey' => 'cidade_id',
			'conditions' => '',
			'fields' => '',
			'order' => ''
		),
		'Pacote' => array(
			'className' => 'Pacote',
			'foreignKey' => 'pacote_id'
		),
		'Pacote_Desejado' => array(
			'className' => 'Pacote',
			'foreignKey' => 'novo_pacote'
		)
	);

/**
 * hasMany associations
 *
 * @var array
 */
	public $hasMany = array(
		'Calendario' => array(
			'className' => 'Calendario',
			'foreignKey' => 'anuncio_id',
			'dependent' => false,
			'conditions' => '',
			'fields' => '',
			'order' => '',
			'limit' => '',
			'offset' => '',
			'exclusive' => '',
			'finderQuery' => '',
			'counterQuery' => ''
		),
		'Distancia' => array(
			'className' => 'Distancia',
			'foreignKey' => 'anuncio_id',
			'dependent' => false,
			'conditions' => '',
			'fields' => '',
			'order' => '',
			'limit' => '',
			'offset' => '',
			'exclusive' => '',
			'finderQuery' => '',
			'counterQuery' => ''
		),
		'Especial' => array(
			'className' => 'Especial',
			'foreignKey' => 'anuncios_id',
			'dependent' => false,
			'conditions' => '',
			'fields' => '',
			'order' => '',
			'limit' => '',
			'offset' => '',
			'exclusive' => '',
			'finderQuery' => '',
			'counterQuery' => ''
		)
	);
	
	public function anunciosPagosDoUsuario($id){
		return $this->find('all', array('conditions'=>array('usuario_id'=>$id, 'Anuncio.ativo'=>1)));
	}
	
	public function anuncioPertenceAoUsuario($anuncio, $usuario){
		if($anuncio['Anuncio']['usuario_id'] === $usuario)
			return true;
		return false;
	}
	
	public function isVisible($anuncio, $usuario){
		if($anuncio['Anuncio']['ativo'] && $anuncio['Anuncio']['disponivel']) // anuncio ativo - OK
			return true;
		else if($usuario['id_usuarios'] === $anuncio['Anuncio']['usuario_id']) // anuncio não ativo, mas acesso por dono - OK
			return true;
		return false;
	} 
	
	public function incrementaContador($id){
		$dados = $this->read(null, $id);
		$dados['Anuncio']['visualizacao']++;
		$this->save($dados['Anuncio']);
	}

}
